// 对所有的请求进行封装
import axios from 'axios'
import Cookies from 'js-cookie'
import Base64 from './Base64.js'
import router from "@/router";
export function requestUse(config) {
	return new Promise((resolve, reject) => {

		const instance = axios.create({
			baseURL: 'http://192.168.1.54:8080',
			timeout: 5000

		})
		// 后面的都可以调用这个实例来创建模板
		// 创建新的请求拦截器
		instance.interceptors.request.use(config => {
			console.log(config, "我是拦截器")
			// 添加全局的token
			let token = Cookies.get('token')

			config.headers = {
				"X-Litemall-Admin-Token": token
			}

			return config
		}, err => {
			return err
		})

		// 这里进行响应的操作
		instance.interceptors.response.use(response => {
			
			console.log("我是响应器",response)
			// 也就是token过期，那么我们怎么操作呢？
			if (response.data.errno == 501) {
				//如果令牌过期我们怎么处理呢？如果有选中按钮的话就再次刷新
				console.log(JSON.parse(Cookies.get('checked')))
				if(JSON.parse(Cookies.get('checked'))) {
						 return login(response) //调用函数刷新令牌
				}else{
					// 
					console.log("我是响应器跳转login的")
						router.replace('/login')
				}
				
				
				
					
				
			}

			return response

		})
		instance(config).then((res) => {
			// 我们要将获取的结果传递出去
			resolve(res)
		}).catch(err => {
			reject(err)
		})

		// 进行书写登录操作
		async function login(response) {
			let test = await instance({
				method: "post",
				url: '/admin/auth/login',
				data: {
					username: Base64.decode(Cookies.get('username')),
					password: Base64.decode(Cookies.get('password'))
				}

			})

			if (test.data.errmsg == '成功') {
				// 如果返回的值是成功的话，那么就重新进行请求，并设置请求时间
				console.log("二次请求成功",test)
				console.log("我是login里面的response",response)
				let expires = new Date(new Date() * 1 + 1200 * 1000)
				// 重新对token的请求时间进行请求
				Cookies.set('token', test.data.data.token, {
					expires: expires
				})
				// 重新再次添加请求头
				response.config.headers = {
					"X-Litemall-Admin-Token": test.data.data.token
				}
				//重新请求axios
				return await axios(response.config) 

			} 

		}






	})





}
